﻿#include <WinSock2.h>
#include "Protocol.h"

typedef struct OnlineUser OnlineUser;
typedef struct OnlineUserList OnlineUserList;

typedef void(*OnlineUserListDelete)(OnlineUserList*);
typedef void(*OnlineUserListAddSocket)(OnlineUserList*, SOCKET);
typedef SOCKET(*OnlineUserListFind)(OnlineUserList*, LPCTSTR);
typedef OnlineUser*(*OnlineUserListFindBySocket)(OnlineUserList*, SOCKET, OnlineUser**);
typedef void(*OnlineUserListRemoveAll)(OnlineUserList*);
typedef void(*OnlineUserListRemoveByName)(OnlineUserList*, LPCTSTR);
typedef void(*OnlineUserListRemoveBySocket)(OnlineUserList*, SOCKET);
typedef void(*OnlineUserListSetAt)(OnlineUserList*, SOCKET, LPCTSTR);

// 在线用户
struct OnlineUser {
    TCHAR username[USERNAME_BUF_LEN];   // 用户名
    OnlineUser* next;               // 下一个在线用户
    SOCKET sock;                    // 套接字
};

// 在线用户列表
struct OnlineUserList {
    OnlineUser* mCauda; // 尾结点
    OnlineUser* mHead;  // 头结点

    OnlineUserListDelete deleteSelf;
    OnlineUserListAddSocket addSocket;
    OnlineUserListFind find;
    OnlineUserListFindBySocket findBySocket;
    OnlineUserListRemoveAll removeAll;
    OnlineUserListRemoveByName removeByName;
    OnlineUserListRemoveBySocket removeBySocket;
    OnlineUserListSetAt setAt;
};

OnlineUserList* New_OnlineUserList();
